home *** CD-ROM | disk | FTP | other *** search
/ NeXT Education Software Sampler 1992 Fall / NeXT Education Software Sampler 1992 Fall.iso / Programming / Source / 2DLab / voronoi.h < prev    next >
Encoding:
C/C++ Source or Header  |  1992-01-14  |  2.9 KB  |  153 lines

  1. #ifndef NULL
  2. #define NULL 0
  3. #endif
  4.  
  5. #define DELETED -2
  6.  
  7. #define MAXSITES 4096
  8.  
  9. #define le 0
  10. #define re 1
  11.  
  12. extern struct Site *(*next)();
  13. extern int triangulate, sorted, plot, debug, outputmode;
  14. extern float xmin, xmax, ymin, ymax, deltax, deltay;
  15. extern float pxmin, pxmax, pymin, pymax;
  16.  
  17. extern char execdir[];        /* from voronoi.c */
  18.  
  19. extern int numvedges, numdedges;
  20.  
  21. extern int total_alloc;        /* memory.c */
  22. extern int menu;        /* menus.c */
  23.  
  24. /* GL DRAWING STUFF */
  25.  
  26. /* vertex: x, y */
  27. struct vertstruct {
  28.     float x, y;
  29.     int pid;
  30.     };
  31.  
  32. /* vertex: x, y, theta */
  33. struct vertthetastruct {
  34.     float x, y, theta;
  35.     int e1, e2;
  36.     };
  37.  
  38. /* edge: CLIPPED to reasonable bounds */
  39. struct edgestruct {
  40.     float x1, y1, x2, y2;
  41.     int nbr1, nbr2;
  42.     float xm, ym;        /* halfway between inducing voronoi sites */
  43.     };
  44.  
  45. typedef struct vertstruct VERT;
  46. typedef struct vertthetastruct VERTTHETA;
  47. typedef struct edgestruct EDGE;
  48.  
  49. /* triangle: holds POINTERS to three verts */
  50. struct tristruct {
  51.     VERT *v1, *v2, *v3;
  52.     };
  53.  
  54. struct circstruct {
  55.     float cx, cy, r;
  56.     int nbr1, nbr2, nbr3;
  57.     };
  58.  
  59. typedef struct tristruct TRI;
  60. typedef struct circstruct CIRC;
  61.  
  62. #define MAXVERTS (3 * MAXSITES)
  63. #define MAXEDGES (2 * MAXSITES)
  64. #define MAXTRIS  (MAXEDGES)
  65.  
  66. extern VERT GLsites[MAXVERTS];
  67. extern VERT verts[MAXVERTS];
  68. extern EDGE vedges[MAXEDGES];
  69. extern EDGE dedges[MAXEDGES];
  70. extern TRI  tris[MAXTRIS];
  71. extern CIRC circles[MAXTRIS];
  72.  
  73. /* END GL DRAWING STUFF */
  74.  
  75. struct    Freenode    {
  76.     struct Freenode *nextfree;
  77. };
  78.  
  79. struct    Freelist    {
  80.     struct Freenode *head;
  81.     int    nodesize;
  82. };
  83.  
  84. char *getfree();
  85. char *myalloc();
  86.  
  87. struct Point {
  88.     float x,y;
  89. };
  90.  
  91. /* structure used both for sites and for vertices */
  92. struct Site {
  93.     struct Point coord;
  94.     int sitenbr;
  95.     int refcnt;
  96. };
  97.  
  98. typedef struct Site SITE;
  99.  
  100. struct Edge {
  101.     float a,b,c;
  102.     struct Site *ep[2];
  103.     struct Site    *reg[2];
  104.     int    edgenbr;
  105. };
  106.  
  107. extern struct Site *sites;
  108. extern int nsites;
  109. extern int siteidx;
  110. extern int sqrt_nsites;
  111. extern int nvertices;
  112. extern struct Freelist sfl;
  113. extern struct Site *bottomsite;
  114.  
  115. extern struct Site *nextone();        /* from voronoi.c */
  116.  
  117. extern int nedges;
  118. extern struct    Freelist efl;
  119.  
  120. void v_endpoint();
  121. int has_endpoint(),right_of();
  122. struct Site *intersect();
  123. float dist();
  124. struct Point PQ_min();
  125. struct Halfedge *PQextractmin();
  126. struct Edge *bisect();
  127.  
  128. struct Halfedge {
  129.     struct Halfedge *ELleft, *ELright;
  130.     struct Edge    *ELedge;
  131.     int    ELrefcnt;
  132.     char ELpm;
  133.     struct Site    *vertex;
  134.     float ystar;
  135.     struct Halfedge *PQnext;
  136. };
  137.  
  138. extern struct Freelist    hfl;
  139. extern struct Halfedge *ELleftend, *ELrightend;
  140. extern int ELhashsize;
  141. extern struct Halfedge **ELhash;
  142.  
  143. struct Halfedge *HEcreate(), *ELleft(), *ELright(), *ELleftbnd();
  144. struct Site *leftreg(), *rightreg();
  145.  
  146. extern int PQhashsize;
  147. extern struct Halfedge *PQhash;
  148. extern int PQcount;
  149. extern int PQmin;
  150.  
  151. int PQempty();
  152. struct Halfedge *PQfind();
  153.